<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        /*
            作用域：
                变量的有效的范围
            块级作用域： es6里面才有
            函数作用域：
                变量的使用范围跟函数有关

            全局变量：在整个js里面都可以使用的变量就是全局变量
                
            局部变量：只在函数内部被使用的变量就是局部变量

            作用域链：
                1.函数的嵌套(函数里面可以继续定义函数)
                2.若变量没有声明(无var)，就是没有作用域，运行后会污染并影响函数内外部

        */
        var  year=2020//全局变量
            
        function sayHello()
        {
            var uname="卢大帅";  //局部变量
            month=12            //没有定义var(无作用域)运行改函数后默认为全局变量
            console.log("sayHello内部",uname);
        }
        
        sayHello();
        console.log('month==>',+month);
        // console.log("在外部输出uname",uname);


        var a=10;
        function say()
        {
            var a=20;
            function sayHi()
            {
                a=30;  //这里没有定义var(没有作用域)，运行后，就与var a=20同级
                console.log("在sayHi里面输出==>",+a);
            }
            
            sayHi();
            var a=20;
            console.log("在say里面输出==>",+a);  //同级  往上的就近原则
        }
        say();
        console.log("在外面输出==>",+a);
        

       
    </script>
</head>
<body>
    
</body>
</html>